using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;

/// <summary>
/// @brief 定义了一个Shape管理器，用于处理游戏中的形状移动、旋转和下落逻辑。
/// </summary>
public class ShapeManager : MonoBehaviour
{
    private Transform pivot;//旋转中心

    private bool isShapeStop= false;//当前形状无法控制，无法下落

    private float timer = 0;//计时器，用于控制形状下落的频率。

    private float stepTime = 0.8f;//每步下落的时间间隔。

    private bool isSpeedup = false;//是否加速形状下落。

    private int multiple = 15;//加速下落时的倍数。

    private GameManager gameManager;
    private void Awake()
    {
        pivot = transform.Find("Pivot");
    }

    /**
    * @brief 每帧更新方法，处理形状的下落和输入控制。
    */
    private void Update()
    {
        Debug.Log(isShapeStop);

        if (isShapeStop)
        {
            return;
        }
        timer += Time.deltaTime;
        if (timer > stepTime)
        {
            timer = 0;
            Fall();
        }
        InputControl();
    }

    /**
     * @brief 初始化形状的颜色和控制对象。
     * 
     * @param color 形状的颜色。
     * @param ctrl 控制类实例。
     * @param gameManager 游戏管理器实例。
     */
    //public void Init(Color color, Ctrl ctrl, GameManager gameManager)
    public void Init(Color color, GameManager gameManager)
    {
        Debug.Log("Enter Shape.Init");
        foreach (Transform t in transform)
        {
            if (t.tag == "Block")
            {
                t.GetComponent<SpriteRenderer>().color = color;
            }
        }
        
        //this.ctrl = ctrl;
        this.gameManager = gameManager;
        isShapeStop=false;
    }

    /**
     * @brief 处理形状下落逻辑。
     */
    private void Fall()
    {
        Vector3 pos = transform.position;
        pos.y -= 1;
        transform.position = pos;
        if (gameManager.model.IsValidMapPosition(this.transform) == false)
        {
            Debug.Log("isPause");
            pos.y += 1;
            transform.position = pos;
            isShapeStop = true;
            //bool isLineclear = gameManager.model.PlaceShape(this.transform);
            //if (isLineclear) gameManager.audioManager.PlayLineClear();
            gameManager.FallDown();
            return;
        }
        //ctrl.audioManager.PlayDrop();
    }
    /**
      * @brief 处理玩家输入控制形状移动和旋转。
      */

    private void InputControl()
    {
        //if (isSpeedup) return;
        float h = 0;

        // Rotation (Up Arrow)
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            transform.RotateAround(pivot.position, Vector3.forward, -90);
            if (gameManager.model.IsValidMapPosition(this.transform) == false)//如果旋转后超出范围，直接转回来
            {
                transform.RotateAround(pivot.position, Vector3.forward, 90);
            }
        }

        // Speed up (Down Arrow)
        if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            isSpeedup = true;
            stepTime /= multiple;
        }
        else if (Input.GetKeyUp(KeyCode.DownArrow))
        {
            isSpeedup = false;
            stepTime *= multiple;
        }

        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            h = -1;
        }
        else if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            h = 1;
        }

        if (h != 0)
        {
            Vector3 pos = transform.position;
            pos.x += h;
            transform.position = pos;
            if (gameManager.model.IsValidMapPosition(this.transform) == false)
            {
                pos.x -= h;
                transform.position = pos;
            }
        }
    }

    /**
     * @brief 暂停形状下落。
     */
    //public void Pause()
    //{
    //    isShapeStop = true;
    //}

    /**
 * @brief 恢复形状下落。
 */
    //public void Resume()
    //{
    //    isShapeStop = false;
    //}
}
